class Solution {
public:
    void FindNumsAppearOnce(vector<int> data,int* num1,int *num2) {
        if(data.empty())
            return;
        int split=0;
        for(int i=0;i<data.size();i++){
            split=split^data[i];
        }
        *num1=0;
        *num2=0;
        int indexOf1=FindIndexOf1(split);
        for(int i=0;i<data.size();i++){
            if(IsBit1(data[i],indexOf1))
                *num1=*num1^data[i];
            else
                *num2=*num2^data[i];
        }
    }
    int FindIndexOf1(int split){
        int move=1;
        int num=0;
        while(move){
            if((split&move)!=0){
                return num;
            }else{
                num++;
                move=move<<1;
            }
        }
        return num;
    }
    bool IsBit1(int num, int index){
        if((num&(1<<index))!=0)
            return true;
        else
            return false;
    }
};